home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / newsgrp / group01b.txt / 000054_icon-group-sender_Thu Mar 8 08:01:36 2001.msg < prev    next >
Internet Message Format  |  2002-01-03  |  2KB

  1. Return-Path: <icon-group-sender>
  2. Received: (from root@localhost)
  3.     by baskerville.CS.Arizona.EDU (8.11.1/8.11.1) id f28F16o23529
  4.     for icon-group-addresses; Thu, 8 Mar 2001 08:01:06 -0700 (MST)
  5. Message-Id: <200103081501.f28F16o23529@baskerville.CS.Arizona.EDU>
  6. From: Michael Horsch <horsch@cs.usask.ca>
  7. X-Newsgroups: comp.lang.apl,comp.lang.forth,comp.lang.icon,comp.lang.lisp,comp.lang.mumps,comp.lang.scheme,comp.lang.smalltalk
  8. Subject: Re: New Scientist Puzzle
  9. Date: Wed, 07 Mar 2001 18:21:01 -0600
  10. X-Trace: tribune.usask.ca 984010861 9817 128.233.128.5 (8 Mar 2001 00:21:01 GMT)
  11. X-Complaints-To: usenet@tribune.usask.ca
  12. X-Accept-Language: en
  13. To: icon-group@cs.arizona.edu
  14. Errors-To: icon-group-errors@cs.arizona.edu
  15. Status: RO
  16. Content-Length: 1038
  17.  
  18. I coded up a Prolog + CLP(FD) solution.  I have a well-documented 
  19. version of it available, but since no one else provided comments, 
  20. I won't either.  :-)  The CLP(FD) engine I am using is provided 
  21. by Sicstus Prolog.  The run time is about 40msec on a Sparc Ultra10.  
  22.  
  23.  
  24. % sictus prolog file: vn.pl
  25. :- use_module(library(clpfd)).
  26. :- use_module(library(lists)).
  27.  
  28. solve(P,Q) :-
  29.   setof((PP,QQ), pair(PP,QQ), Pairs),
  30.   unique(Pairs, (P,Q)).
  31.  
  32. unique(Pairs, (P,Q)) :-
  33.   select((P,Q), Pairs, Rs),
  34.   \+ member((P,_), Rs), 
  35.   \+ member((_,P), Rs),
  36.   \+ member((Q,_), Rs), 
  37.   \+ member((_,Q), Rs).
  38.  
  39. pair(P,Q) :-
  40.   domain([V,I,E,R,N,U], 0, 9),
  41.   P #= V*1000 + I*100 + E*10 + R,
  42.   Q #= N*1000 + E*100 + U*10 + N,
  43.   V #> 0,
  44.   N #> 0,
  45.   domain([X1,X2,Y1,Y2], 0, 9),
  46.   X #= X1*10 + X2,
  47.   Y #= Y1*10 + Y2,
  48.   X1 #> 0,
  49.   Y1 #> 0,
  50.   P #= X*X,
  51.   Q #= Y*Y,
  52.   all_different([V,I,E,R,N,U]),
  53.   labeling([], [P,Q]).
  54.  
  55. % eof
  56.  
  57.  
  58. Mike
  59. --
  60. Michael C. Horsch
  61. Department of Computer Science
  62. University of Saskatchewan
  63. http://www.cs.usask.ca/faculty/horsch/home.shtml
  64.